package com.hongpu.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hongpu.domain.CoolTowerProjectAttendance;
import com.hongpu.dto.CoolTowerProjectAttendanceDto;
import com.hongpu.dto.CoolTowerProjectAttendanceInfoDto;
import com.hongpu.dto.CoolTowerProjectAttendancePageDto;
import com.hongpu.dto.CoolTowerProjectDto;
import com.hongpu.vo.CostStatisticsVo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author Michael zhang
 * @description 针对表【cool_tower_project_attendance(冷却塔安装人员考勤打卡)】的数据库操作Mapper
 * @createDate 2025-06-10 15:50:48
 * @Entity generator.domain.CoolTowerProjectAttendance
 */
public interface CoolTowerProjectAttendanceMapper extends BaseMapper<CoolTowerProjectAttendance> {
    /**
     * 统计汇总员工在一个项目上的工数及各种费用
     */
    public CoolTowerProjectAttendanceDto selectSum(@Param("coolTowerProjectId") Long coolTowerProjectId,
                                                   @Param("coolTowerEmployeeId") Long coolTowerEmployeeId,
                                                   @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 统计员工在项目上的打卡记录
     */
    public List<String> selectCheckInDate(@Param("coolTowerProjectId") Long coolTowerProjectId,
                                          @Param("coolTowerEmployeeId") Long coolTowerEmployeeId,
                                          @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 统计员工在项目上的备注
     */
    public List<String> selectRemark(@Param("coolTowerProjectId") Long coolTowerProjectId,
                                     @Param("coolTowerEmployeeId") Long coolTowerEmployeeId,
                                     @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 根据项目ID统计该项目所有的当日费用
     */
    public BigDecimal selectTotalCostByCoolTowerProjectId(Long coolTowerProjectId);

    /**
     * 根据项目ID统计这个项目的工数
     */
    public BigDecimal selectNumberOfJobsByCoolTowerProjectId(Long coolTowerProjectId);

    /**
     * 分页
     */
    public IPage<CoolTowerProjectAttendance> page(@Param("ipage") IPage ipage,
                                                  @Param("coolTowerProjectAttendance") CoolTowerProjectAttendancePageDto coolTowerProjectAttendance);

    /**
     * 获取某个员工在项目的具体某一天的打卡信息
     */
    public CoolTowerProjectAttendance coolTowerProjectAttendanceInfo(CoolTowerProjectAttendanceInfoDto coolTowerProjectAttendanceInfoDto);

    /**
     * 根据项目ID统计该项目的费用---点击填报时打开的页面中数据列表用的接口（分页）
     *
     * @param ipage
     * @param coolTowerProjectDto
     * @return
     */
    public IPage<CostStatisticsVo> costStatistics(@Param("ipage") IPage<CoolTowerProjectDto> ipage, @Param("coolTowerProjectDto") CoolTowerProjectDto coolTowerProjectDto);

    /**
     * 根据员工ID，项目ID，打卡日期查询数据库中是否有数据
     */
    public CoolTowerProjectAttendance selectByEmployeeIdAndProjectIdAndCheckInDate(@Param("coolTowerEmployeeId") Long coolTowerEmployeeId,
                                                                                   @Param("coolTowerProjectId") Long coolTowerProjectId,
                                                                                   @Param("checkInDate") Date checkInDate,
                                                                                   @Param("id") Long id);
}




